#pragma once

typedef enum {DELIVERY_PENDING, DELIVERY_LOADED, DELIVERY_DISPATCHED, DELIVERY_DONE} DeliveryBatchStatus;
typedef enum {SUPPLY_PENDING, SUPPLY_UNLOADED, SUPPLY_DONE} SupplyBatchStatus;

//IMPORTANT RULE: IDs cannot be 0

typedef struct
{
	unsigned int ID;
	char* Name;
} Region;

typedef struct
{
	unsigned int ID;
	char* Name;
	unsigned int Inventory;
} Product;

typedef struct
{
	unsigned int ID;
	char* Name;
	char* ContactInformation;
} Contact;

typedef struct
{
	unsigned int ID;
	unsigned int ContactID;
	unsigned int RegionID;
} Customer;

typedef struct
{
	unsigned int ID;
	unsigned int ContactID;
} Supplier;

typedef struct
{
	unsigned int ID;
	unsigned int ProductID;
	unsigned int Amount;
} Delivery;

typedef struct
{
	unsigned int ID;
	unsigned int CustomerID;
	unsigned int* DeliveriesIDs;
	char* DueDate;
	DeliveryBatchStatus Status;

} DeliveryBatch;

typedef struct
{
	unsigned int ID;
	unsigned int ProductID;
	unsigned int Amount;
} Supply;

typedef struct
{
	unsigned int ID;
	unsigned int SupplierID;
	unsigned int* SuppliesIDs;
	SupplyBatchStatus Status;
} SupplyBatch;